﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include "NamespaceGame1.h"
#include "NamespaceGame2.h"
using namespace std;

//5.命名空间必须定义在全局作用域下；
namespace A
{
	//4.命名空间下，可以放函数，变量，结构体，类；
	void func();
	int m_A = 20;
	struct Person
	{
	};
	class Animal {};
	//6.命名空间可以嵌套命名空间；
	namespace B
	{
		int m_A = 10;
	};
}

//8.命名空间是开放的，可以随时往原先的命名空间添加内容；此A命名空间，会和上面的命名空间A进行合并；
namespace A
{
	int m_B = 1000;
}
//10.无名或匿名命名空间；当写了无名命名空间，相当于写了static int m_C; ，只能在当前文件内使用；
namespace
{
	int m_C = 20;
}
//11.命名空间可以起别名；
namespace veryLongName
{
	int m_A = 30;
}
void testNamespace()
{
	cout << "7.作用域B下的m_A为：" << A::B::m_A << endl;//7.作用域B下的m_A为：10
	cout << "9.A下的m_A为：" << A::m_A << "  m_B为：" << A::m_B << endl;//9.A下的m_A为：20  m_B为：1000

	//12.起别名；
	namespace veryShortName = veryLongName;
	cout << veryLongName::m_A << endl;//30
	cout << veryShortName::m_A << endl;//30
}

//main234：命名空间的用法
int main234()
{
	//3.namespace命名空间主要用途，用来解决命名冲突的问题；
	LOL::goAtk();//1.LOL攻击实现！
	KingGlory::goAtk();//2.王者荣耀攻击实现！

	testNamespace();

	system("pause");
	return EXIT_SUCCESS;
}